package com.yoshino.leetcode.improve40.nineteenth;

import java.util.Map;
import java.util.TreeMap;

class MyCalendar {

    // 用树，找到预存入中，离 start 最接近的两个结点（一大一小
    // 使用TreeMap的方法
    TreeMap<Integer, Integer> map;

    public MyCalendar() {
        map = new TreeMap<>();
    }
    
    public boolean book(int start, int end) {
        // 返回 比start小的中，最大的元素（在下层
        Map.Entry<Integer, Integer> floorEntry = map.floorEntry(start);
        // 返回 比start大的中，最小的元素（在上层
        Map.Entry<Integer, Integer> ceilingEntry = map.ceilingEntry(start);
        if (floorEntry != null && floorEntry.getValue() > start) {
            return false;
        }
        if (ceilingEntry != null && ceilingEntry.getKey() < end) {
            return false;
        }
        map.put(start, end);
        return true;
    }
}

/**
 * Your MyCalendar object will be instantiated and called as such:
 * MyCalendar obj = new MyCalendar();
 * boolean param_1 = obj.book(start,end);
 */